package november.hashtable;


import java.util.LinkedList;

/**
 * @author huangxin
 * @date 2019/11/20-14:19
 */
public class HashTable {
    //初始化链表个数
    public HashTable(int size) {
        this.size = size;
        this.linkedLists = new EmpLinkedList[size];
        //初始化链表数组里的链表
        for (int i = 0; i < linkedLists.length; i++) {
            linkedLists[i] = new EmpLinkedList();
        }
    }

    private EmpLinkedList[] linkedLists;
    private int size;//链表个数


    /**
     * 添加元素
     *
     * @param emp
     */
    public void add(Emp emp) {
//        根据id添加到对应的链表
        linkedLists[hashFun(emp.id)].add(emp);
    }


    /**
     * 遍历hashTable(数组链表)
     */
    public void list() {
        for (int i = 0; i < linkedLists.length; i++) {
            linkedLists[i].show(i);
        }
    }


    /**
     * 散列函数,根据id获取存入的数组下标
     *
     * @param id
     * @return
     */
    public int hashFun(int id) {
        return id % size;
    }


    /**
     * 根据id查找元素
     *
     * @param id
     * @return
     */
    public Emp find(int id) {
        //散列算法找出对应的哈希表
        int hashIndex = hashFun(id);
        EmpLinkedList empLinkedList = linkedLists[hashIndex];
        //根据id查找
        Emp emp = empLinkedList.findById(id);
        if (emp != null) {
            System.out.println("在第"+hashIndex+"条列表找到该元素");
        }

        return emp;
    }


    /**
     * 根据id删除元素
     *
     * @param id
     * @return
     */
    public void delete(int id) {
        //散列算法找出对应的哈希表
        int hashIndex = hashFun(id);
        EmpLinkedList empLinkedList = linkedLists[hashIndex];

        empLinkedList.delete(id);
    }
}

